package com.ceair.service;

import com.ceair.entity.request.PageReq;
import com.ceair.entity.request.PickupMyTaskReq;
import com.ceair.entity.request.QueryCirculationRecordsReq;
import com.ceair.entity.request.RevertMyTaskReq;
import com.ceair.entity.vo.CirculationRecordsVO;
import com.ceair.entity.vo.MyCompleteTaskListInfoVO;
import com.ceair.entity.vo.MyStartTaskListInfoVO;
import com.ceair.entity.vo.TaskListInfoVO;

import java.util.List;

/**
 * @author wangbaohai
 * @ClassName IMayTaskService
 * @description: 我的任务信息接口
 * @date 2025年05月01日
 * @version: 1.0.0
 */
public interface IMayTaskService {

    /**
     * 获取我的待办任务列表
     *
     * @param pageReq 分页请求对象，包含分页参数如页码和每页大小
     * @return 返回一个TaskListInfoVO对象的列表，每个对象包含待办任务的相关信息
     */
    TaskListInfoVO myTodoTask(PageReq pageReq);

    /**
     * 领取我的任务接口
     * 此方法允许用户领取属于自己的任务，根据提供的条件和参数
     *
     * @param pickupMyTaskReq 领取任务的请求对象，包含领取任务所需的信息和条件
     * @return 返回一个Boolean值，表示任务领取是否成功true表示成功，false表示失败
     */
    Boolean pickupMyTask(PickupMyTaskReq pickupMyTaskReq);

    /**
     * 归还我的任务
     * <p>
     * 此方法用于将某个任务归还到其先前的状态通常用于实现任务的归还功能
     * 它接受一个包含归还请求详情的对象作为参数，并返回一个布尔值，指示任务是否成功恢复
     *
     * @param revertMyTaskReq 恢复任务请求对象，包含需要恢复的任务的相关信息
     * @return Boolean 如果任务成功恢复，则返回true；否则返回false
     */
    Boolean revertMyTask(RevertMyTaskReq revertMyTaskReq);

    /**
     * 根据流程实例ID查询任务的图像Base64编码字符串
     *
     * @param processInstanceId 流程实例ID，用于唯一标识一个流程实例
     * @return 返回与流程实例ID关联的任务图像的Base64编码字符串表示
     */
    String queryTaskImage(String processInstanceId);

    /**
     * 查询我发起的任务列表信息
     * <p>
     * 该方法用于获取用户发起的任务列表，根据分页请求进行数据检索
     * 主要解决了用户需要查看自己发起的所有任务的需求
     *
     * @param pageReq 分页请求对象，包含分页查询的必要信息，如当前页码、每页大小等
     * @return 返回一个对象，其中包含查询到的任务列表信息以及相关的分页细节
     */
    MyStartTaskListInfoVO queryMyStartTaskList(PageReq pageReq);


    /**
     * 查询流通记录
     * <p>
     * 根据查询请求对象中的条件查询流通记录，该方法主要用于获取特定条件下的流通记录列表
     *
     * @param queryCirculationRecordsReq 查询流通记录的请求对象，包含查询条件如时间范围、记录类型等
     * @return 返回一个流通记录的列表，每个记录封装为CirculationRecordsVO对象
     */
    List<CirculationRecordsVO> queryCirculationRecords(QueryCirculationRecordsReq queryCirculationRecordsReq);


    /**
     * 查询我的完成任务列表
     * <p>
     * 该方法用于获取用户已完成的任务列表，根据分页请求进行数据检索
     * 主要解决了用户需要查看自己已完成的任务需求
     *
     * @param pageReq 分页请求对象，包含分页查询的必要信息，如当前页码、每页大小等
     * @return 返回一个对象，其中包含查询到的任务列表信息以及相关的分页细节
     */
    MyCompleteTaskListInfoVO queryMyCompleteTaskList(PageReq pageReq);

}
